/**
 * @author: 最帅的的乐乐
 * @date: 2025-02-20 13:31 星期四
 * @motto the harder, the luckier。
 */

public class _38_CountAndSay {

    // countAndSay 方法，生成外观数列的第 n 项
    public static String countAndSay(int n) {
        // 初始化第 1 项为 "1"
        String str = "1";

        // 从第 2 项开始，依次生成直到第 n 项
        for (int i = 2; i <= n; ++i) {
            StringBuilder sb = new StringBuilder();  // 用来构建新的字符串
            int start = 0;  // start 记录每个数字段的开始位置
            int pos = 0;  // pos 记录当前位置

            // 遍历当前的字符串 (str) 进行描述
            while (pos < str.length()) {
                // 查找当前数字段的结束位置 (相同的数字)
                while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
                    pos++;
                }

                // 描述当前数字段：数量 + 数字
                sb.append(Integer.toString(pos - start)).append(str.charAt(start));

                // 更新 start 为当前段的结束位置
                start = pos;
            }

            // 更新 str 为新生成的字符串
            str = sb.toString();
        }

        return str;  // 返回第 n 项
    }

    // main 方法，作为程序入口
    public static void main(String[] args) {
        // 测试 countAndSay 方法，输入 n 的值
        int n = 5;  // 可以根据需要修改 n 的值
        String result = countAndSay(n);

        // 输出结果
        System.out.println("The " + n + "th term in the count-and-say sequence is: " + result);
    }
}